package com.itheima;

public class TestLambda {
    public static void main(String[] args) {
        //testA();
        //testB();
        //testC();
        testD();
    }

    public static void testC(){
        C c1 = new C() {
            @Override
            public String show(String name) {
                return "name:"+name;
            }
        };
        //2. 创建C接口的Lambda表达式
        C c2 = name-> "name:"+name;
        System.out.println(c1.show("zxb"));
    }

    public static void testD(){
        D d1 = new D() {
            @Override
            public int max(int a, int b) {
                return a>b?a:b; //返回最大值
            }
        };
        //2. 创建D接口的Lambda表达式
        D d2 = (a,b)-> a>b?a:b;
        System.out.println(d2.max(10, 20));
        //创建D接口的方法引用对象
        D d3 = Math::max;
        System.out.println(d3.max(10, 20));
    }

    public static void testB(){
        //1. 创建B接口的匿名内部类对象
        B b1 = new B() {
            @Override
            public void show(String name) {
                System.out.println("name："+name);
            }
        };

        //创建一个B接口的Lambda表达式
        B b2 = name-> System.out.println(name);
        //创建B接口的方法引用对象
        B b3 = System.out::println;
        b3.show("zxb");

    }


    public static void testA(){
        //1. 创建A接口的匿名内部类对象
        A a1 = new A() {
            @Override
            public void show(String name, int age) {
               System.out.println("name："+name+",age："+age);
            }
        };
        //2. 将匿名内部类对象改成Lambda表达式
        A a2 = (name,age)-> System.out.println("name："+name+",age："+age);
        a2.show("张三", 20);

        //3. 将Lambda表达式改成方法引用（静态方法）
        A a3 = TestLambda::show2;
        a3.show("李四", 30);

        //4. 将Lambda表达式改成方法引用（成员方法）
        TestLambda testLambda = new TestLambda();
        A a4 = testLambda::show3;
        a4.show("王五", 40);

    }
    //定义一个成员方法，故意让返回值和形参和A接口中的方法一致
    public static void show2(String name, int age){
        System.out.println("name2："+name+",age2："+age);
    }

    public void show3(String name, int age){
        System.out.println("name3："+name+",age3："+age);
    }
}
